package com.hsgene.goods.constants;

import com.hsgene.common.util.exception.ErrorCode;
import com.hsgene.goods.exception.GoodsErrorCode;

/**
 * 供应商商品状态
 *
 * @author wangbing
 * @version 1.0, 2018/7/13
 */
public enum GoodsOriginStatus {

    /**
     * 待完善
     */
    INCOMPLETE(1, "待完善"),

    /**
     * 待发布
     */
    COMPLETE(2, "待发布"),

    /**
     * 发布待审核
     */
    COMPLETE_NOT_AUDITED(3, "发布待审核"),

    /**
     * 已发布
     */
    PUBLISHED(4, "已发布"),

    /**
     * 撤销待审核
     */
    REVOCATION_NOT_AUDIT(5, "撤销待审核");

    private final int code;

    private final String desc;

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    GoodsOriginStatus(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public static GoodsOriginStatus getEnum(int code) {
        for (GoodsOriginStatus status : values()) {
            if (status.code == code) {
                return status;
            }
        }
        throw new IllegalStateException("非法商品状态code值");
    }

    /**
     * 根据状态自检是否可以申请发布
     *
     * @return 错误提示信息
     */
    public ErrorCode checkRelease() {
        if (COMPLETE.equals(this)) {
            return null;
        } else if (INCOMPLETE.equals(this)) {
            return GoodsErrorCode.GOODS_RELEASE_INCOMPLETE;
        } else if (COMPLETE_NOT_AUDITED.equals(this)) {
            return GoodsErrorCode.GOODS_RELEASE_COMPLETE_NOT_AUDITED;
        } else if (REVOCATION_NOT_AUDIT.equals(this)) {
            return GoodsErrorCode.GOODS_RELEASE_REVOCATION_NOT_AUDIT;
        } else {
            return GoodsErrorCode.GOODS_RELEASE_PUBLISHED;
        }
    }

    /**
     * 根据状态自检是否可以进行申请撤销发布
     *
     * @return 错误提示信息
     */
    public ErrorCode checkOfflineRelease() {
        if (PUBLISHED.equals(this)) {
            return null;
        } else if (REVOCATION_NOT_AUDIT.equals(this)) {
            return GoodsErrorCode.GOODS_REVOCATION_REVOCATION_NOT_AUDIT;
        } else {
            return GoodsErrorCode.GOODS_NOT_RELEASE;
        }
    }

    /**
     * 根据状态自检是否可以进行审核操作
     *
     * @return 错误提示信息
     */
    public ErrorCode checkAudit() {
        if (!COMPLETE_NOT_AUDITED.equals(this) && !REVOCATION_NOT_AUDIT.equals(this)) {
            return GoodsErrorCode.GOODS_NOT_AUDIT;
        }
        return null;
    }
}
